//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**<h3>StartAuswertung</h3>
 * Die Programmmaske stellt die Benutzeroberfläche her.
 * @author Viktor Ayzenshtadt <vsa85@gmx.de>	
 * @author Hung Nguyen Huu <hung852001@yahoo.com>
 * @version 0009 18.07.2011 00:33:26
 */

public class StartAuswertung extends JFrame{

	protected JTextField gebiet;
	protected JTextField von;
	protected JTextField bis;
	protected JTextField help; 	// versteckte inputFeld für die F1 Taste - Hilfe
	protected JComboBox gebietCB;
	protected JComboBox geschlechtCB;
	protected JComboBox darstellungCB;
	protected JButton findkey;
	protected JButton info;
	protected JButton reset;
	protected JButton select;
	protected String[] gebietArray = {""};
	

	public StartAuswertung() {								// Konstruktor
		this.von = new JTextField();
		this.bis = new JTextField();	
		this.info = new JButton("?");
		this.reset = new JButton("Reset");
		this.select = new JButton("Los!");
		String[] geschlecht = {"maennlich & weiblich", "maennlich", "weiblich"};
		String[] darstellung = {"Tabellenansicht","Balkendiagramm"};
		this.gebietCB = new JComboBox(gebietArray);
		gebietCB.setPreferredSize(new Dimension(601,20));	// reset Size gebiet ComboBox
		this.geschlechtCB = new JComboBox(geschlecht); 
		this.darstellungCB = new JComboBox(darstellung);
		
		JFrame frame = new JFrame("Eingabemaske");
		frame.setPreferredSize(new Dimension(800,400));
		frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);	// auf default setzen, um weiter den WindowListener abzufangen
		frame.addWindowListener(new WindowAdapter() {			// auf Fensterschließen abfangen und behandeln
			public void windowClosing(WindowEvent e) {		
				GebietAbfrage ga = new GebietAbfrage();
				ga.closeApp();
			}
		});		

		frame.setLayout(new GridBagLayout());
		frame.setBackground(new Color(235,235,235));
		
		GridBagConstraints el = new GridBagConstraints(); // el = Abkürzung für Element
		
		//Bild
		el.gridy = 1;
		el.gridwidth = GridBagConstraints.REMAINDER;
		el.insets = new Insets(0, 10, 0, 0);
		JLabel header_pic = new JLabel(new ImageIcon("bg3.png"));
		frame.add(header_pic,el);
		
		// Label Namen
		el.gridy = 2;
		el.gridwidth = GridBagConstraints.REMAINDER;
		el.insets = new Insets(-5, 380, 0, 0);
		el.anchor = GridBagConstraints.WEST;
		Label author = new Label("Viktor Ayzenshtadt, Hung Nguyen Huu");
		author.setFont(new Font("Sans Serif", Font.ITALIC, 11));
		frame.add(author, el);
		
		// Label Gebiet
		el.gridy = 4;
		el.gridx = 0;
		el.insets = new Insets(30, 5, 0, 0);
		Label gebiet_l = new Label("Gebiet / Schluessel:");
		gebiet_l.setFont(new Font("Verdana", Font.BOLD, 14));
		frame.add(gebiet_l, el);
		
		// JTextField + KeyBinding
		final Action abfrageStarten = new AbstractAction("suchen") { //startet Abfrage (mit Enter oder Button "suchen")
			public void actionPerformed(ActionEvent e) {
				GebietAbfrage ga = new GebietAbfrage();
					ga.inputValue = gebiet.getText();
					gebietArray = ga.main(null);     // Mainmethode aus der GebietAbfrage starten
					//gebiet.setText("");		 // InputFeld nach dem Suchen leeren
					gebietCB.removeAllItems();       // alte Elemente löschen
					for(int i = 0; i < gebietArray.length; i++){ 	
					// neue Elemente mit der Methode addItem holen 									
					gebietCB.addItem(gebietArray[i]);		
				}
			}
		};
		
		// JTextField gebiet
		this.gebiet = new JTextField(); //Eingabefeld für Gebiet definieren
		gebiet.setPreferredSize(new Dimension(333,30));	// reset Size gebiet Eingabefeld
		el.gridy = 4;
		el.gridx = 2;
		el.insets = new Insets(30, 170, 0, 0);
		gebiet.setFont(new Font("Verdana", Font.BOLD, 16));
		gebiet.getActionMap().put("AbfrageStarten", abfrageStarten);
		final InputMap imap = gebiet.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
		imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "AbfrageStarten");
		frame.add(gebiet, el);
		
		// JButton findkey ("suchen")
		this.findkey = new JButton(abfrageStarten);
		findkey.setBackground(new Color(182,187,195));
		findkey.setPreferredSize(new Dimension(86,29));
		findkey.setFont(new Font("Verdana", Font.BOLD, 12));
		el.gridy = 4;
		el.gridx = 4;
		el.insets = new Insets(30, 520, 0, 0);
		frame.add(findkey, el);	
		
		// JTextField + KeyBinding
		final Action abfrageInfo = new AbstractAction("info") { //Aufruf der Hilfe (Info)
			public void actionPerformed(ActionEvent e) {
				Hilfe help = new Hilfe();
				help.helpView();
			}
		};
		this.help = new JTextField(); //Eingabefeld für Hilfe definieren
		help.setPreferredSize(new Dimension(0,0));	// reset Size gebiet Eingabefeld -> unsichtbar machen!
		el.gridy = 4;
		el.gridx = 6;
		el.insets = new Insets(30, 170, 0, 0);
		gebiet.setFont(new Font("Verdana", Font.BOLD, 16));
		gebiet.getActionMap().put("AbfrageStarten1", abfrageInfo);		
		final InputMap imap1 = gebiet.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
		imap1.put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "AbfrageStarten1");
		frame.add(help, el);
		
		// JButton info ("?")
		info.setBackground(new Color(182,187,195));
		info.setPreferredSize(new Dimension(50,29));
		info.setFont(new Font("Verdana", Font.BOLD, 12));
		el.gridy = 4;
		el.gridx = 8;
		el.insets = new Insets(30, 620, 0, 0);
		class Info implements ActionListener {
			public void actionPerformed(ActionEvent e){
				Hilfe help = new Hilfe();
				help.helpView();
			}
		}
		info.addActionListener (new Info()); 	// ActionListener Aufruf
		frame.add(info, el);
		
		// JComboBox gebietCB
		el.gridy = 5;
		el.gridx = 0;
		el.insets = new Insets(15, 5, 0, 0);
		frame.add(gebietCB, el);
		
		// Label Jahre
		el.gridy = 6;
		el.gridx = 0;
		el.insets = new Insets(30, 5, 0, 0);
		Label jahr_l = new Label("Jahr(e)");
		jahr_l.setFont(new Font("Verdana", Font.BOLD, 14));
		frame.add(jahr_l, el);

		// Label Geschlecht
		el.gridy = 6;
		el.gridx = 2;
		el.insets = new Insets(30, 218, 0, 0);
		Label geschlecht_l = new Label("Geschlecht:");
		geschlecht_l.setFont(new Font("Verdana", Font.BOLD, 14));
		frame.add(geschlecht_l, el);

		// Label Darstellung
		el.gridy = 6;
		el.gridx = 4;
		el.insets = new Insets(30, 444, 0, 0);
		Label darstellung_l = new Label("Darstellung:");
		darstellung_l.setFont(new Font("Verdana", Font.BOLD, 14));
		frame.add(darstellung_l, el);
		
		// Label von
		el.gridy = 7;
		el.gridx = 0;
		el.insets = new Insets(0, 6, 0, 0);
		Label von_l = new Label("von");
		von_l.setPreferredSize(new Dimension(25,25));
		von_l.setFont(new Font("Verdana", Font.PLAIN, 13));
		frame.add(von_l, el);
		
		// JTextField von
		el.gridy = 7;
		el.gridx = 2;
		el.insets = new Insets(0, 35, 0, 0);
		von.setPreferredSize(new Dimension(50,25));
		von.setFont(new Font("Verdana", Font.BOLD, 16));
		frame.add(von, el);
		
		// Label bis
		el.gridy = 7;
		el.gridx = 4;
		el.insets = new Insets(0, 96, 0, 0);
		Label bis_l = new Label("bis");
		bis_l.setPreferredSize(new Dimension(20,25));
		bis_l.setFont(new Font("Verdana", Font.PLAIN, 13));
		frame.add(bis_l, el);
		
		// JTextField bis
		el.gridy = 7;
		el.gridx = 6;
		el.insets = new Insets(0, 120, 0, 0);
		bis.setPreferredSize(new Dimension(50,25));
		bis.setFont(new Font("Verdana", Font.BOLD, 16));		
		frame.add(bis, el);
		
		// JComboBox geschlechtCB
		el.gridy = 7;
		el.gridx = 8;
		el.insets = new Insets(0, 220, 0, 0);
		geschlechtCB.setPreferredSize(new Dimension(180,25));
		frame.add(geschlechtCB, el);
		
		// JComboBox darstellungCB
		el.gridy = 7;
		el.gridx = 10;
		el.insets = new Insets(0, 446, 0, 0);
		darstellungCB.setPreferredSize(new Dimension(160,25));
		frame.add(darstellungCB, el);

		// JButton reset ("reset")
		reset.setBackground(new Color(182,187,195));
		reset.setPreferredSize(new Dimension(86,29));
		reset.setFont(new Font("Verdana", Font.BOLD, 12));
		el.gridy = 8;
		el.gridx = 0;
		el.insets = new Insets(40, 0, 20, 10);
		class Reset implements ActionListener {
			public void actionPerformed(ActionEvent e){
				von.setText("");
				bis.setText("");
				geschlechtCB.setSelectedIndex(0);
				darstellungCB.setSelectedIndex(0);
				GebietAbfrage ga = new GebietAbfrage();
				ga.inputValue = "reset";
				gebietArray = ga.main(null);     // Mainmethode aus der GebietAbfrage starten
				gebietCB.removeAllItems();       // alte Elemente löschen
				for(int i = 0; i < gebietArray.length; i++){ 	
					// neue Elemente mit der Methode addItem holen 									
					gebietCB.addItem(gebietArray[i]);		
				}
				gebiet.setText("");
			}
		}
		reset.addActionListener (new Reset()); 	// ActionListener Aufruf
		frame.add(reset, el);
		
		// Label Hilfe
		el.gridy = 8;
		el.gridx = 2;
		el.insets = new Insets(40, 100, 20, 10);
		Label hilfe_l = new Label("F1 oder ? Button für Hilfe");
		hilfe_l.setPreferredSize(new Dimension(210,25));
		hilfe_l.setFont(new Font("Verdana", Font.PLAIN, 13));
		frame.add(hilfe_l, el);
		
		/*****************************************************/
		/************ Datenauswertung ab hier ****************/
		/*****************************************************/
		
		// JButton select ("Los!)
		select.setBackground(new Color(182,187,195));
		select.setPreferredSize(new Dimension(86,29));
		select.setFont(new Font("Verdana", Font.BOLD, 12));
		el.gridy = 8;
		el.gridx = 4;
		el.insets = new Insets(40, 520, 20, 10);
		class Select implements ActionListener {
			public void actionPerformed(ActionEvent e){	
			// Werte aus dem Formular auslesen und in Variablen speichern - Vorbereitung für die SQL-Abfrage
				String gebietCBVal = (String)gebietCB.getSelectedItem();
				FehlerMeldung.eingabe(gebietCBVal);		// Error_eingabe - Überprüfen der Eingabe 
				char anfang = '[';		//Festlegen der Suchzeichen
				char ende = ']';
				int posAnfang = gebietCBVal.indexOf(anfang); // Position des 1. ges. Zeichens
				int posEnde = gebietCBVal.indexOf(ende);     // Position des 2. ges. Zeichens
				// Gebietsnummer aus der Auswahlliste holen, +1 für das nächste Zeichen ...
				String gebietNr = gebietCBVal.substring(posAnfang+1, posEnde); 				
				int jahrVon = 0;
				int jahrBis = 0;			
				String vonVal = von.getText();
				String bisVal = bis.getText();
//
				int[] jahr = FehlerMeldung.check(vonVal, bisVal, jahrVon, jahrBis);	// jahr[0] -> jahrVon, jahr[1] -> jahrBis
				jahrVon = jahr[0];
				jahrBis = jahr[1];
				// Fehlermeldung aus der FehlerMeldung.check abfangen bei jahr[0] = -10; --> wurde vordefiniert! bricht der ActionEvent ab
				if(jahr[0] == -10){ 
					return;
				}
//				 

				String geschlechtCBVal = (String)geschlechtCB.getSelectedItem();
				if(geschlechtCBVal != ""){		 		// Geschlecht in sexkode ändern
				 	if(geschlechtCBVal.equals("maennlich"))  geschlechtCBVal = "m"; 
					else if(geschlechtCBVal.equals("weiblich")) geschlechtCBVal = "w"; 
					else geschlechtCBVal = "m+w"; 
				}
				String[] resultQuery = Datensatz.getDaten(gebietNr, jahrVon, jahrBis, geschlechtCBVal); // StringArray aus getDaten holen
				String darstellungCBVal = (String)darstellungCB.getSelectedItem();
				if(darstellungCBVal == "Tabellenansicht"){
					// Tabellenansicht rendern
					JFrame tabView = TabellenAnsicht.tabView(resultQuery, gebietNr, jahrVon, jahrBis, geschlechtCBVal);
				}
				else 
					BalkenAnsicht.main(resultQuery, gebietNr, jahrVon, jahrBis, geschlechtCBVal);	// Balkendiagramm wird gerendert!
			}
		}	
		select.addActionListener (new Select()); 	// ActionListener Aufruf
		frame.add(select, el);
		frame.setBounds(0,20,500,500);	// Positionierung (int x, int y, int width, int height)	 // JFrame zentriert positionieren; selbst berechnet:
		frame.pack();
		frame.setVisible(true)	;
	}
	
	/******* Programm Start **********************/

	public static void main (String [] args) {
		StartAuswertung sa = new StartAuswertung();	// Objekt von der Klasse StartAuswertung erzeugen 
	}
	
}
